A computer system generally supports the storage of information on both volatile and nonvolatile storage devices. The difference between a volatile and nonvolatile storage device is that when power is disconnected from a volatile storage device the information is lost. Conversely, when power is disconnected from a nonvolatile storage device the information is not lost. Thus, the storing of information on a nonvolatile storage device allows a user to enter information at one time and retrieve the information at a later time, even though the computer system may have been powered down. A user could also disconnect a nonvolatile storage device from a computer and connect the storage device to a different computer to allow the different computer to access the information.
The information stored on nonvolatile storage devices is generally organized into files. A file is a collection of related information. Over the course of time, a computer system can store hundreds and thousands of files on a storage device, depending upon the capacity of the device. In addition to storing the information, the computer system will typically read, modify, and delete the information in the files. It is important that the computer system organize the files on the storage device so that the storing, reading, modifying, and deleting can be accomplished efficiently.
File systems, which are generally part of a computer operating system, were developed to aid in the management of the files on storage devices. One such file system was developed by Microsoft Corporation for its Disk Operating System (MS-DOS). This file system uses a hierarchical approach to storing files. FIG. 1 shows a pictorial representation of the directory structure for a storage device. Directories Contain a logical group of files. Directories organize files in a manner that is analogous to the way that folders in a drawer organize the papers in the drawer. The blocks labeled DOS, WORD, DAVID, and MARY represent directories, and the blocks labeled AUTOEXEC.BAT, COMMAND.COM, FORMAT.EXE, LETTER2.DOC, LETTER. DOC, and two files named LETTER1.DOC represent files. The directory structure allows a user to organize files by placing related files in their own directories. In this example, the directory WORD may contain all the files generated by the word-processing program WORD. Within directory WORD are two subdirectories DAVID and MARY, which aid in further organizing the WORD files into those developed by David and those developed by Mary.
Conventional file systems take advantage of the multiple-write capability of the nonvolatile store devices. The multiple-write capability allows any bit of information on the storage device to be changed from a one to zero and from a zero to one a virtually unlimited number of times. This capability allows a file to be written to the storage device and the selectively modified by changing some bits of the file.
The disadvantage of the conventional storage devices with multiple-write capability, such as a disk, is their slow speed relative to the speed of the internal computer memory. Conversely, the advantage of these storage devices over computer memory include their nonvolatility, low cost, and high capacity.
A storage device known as a FlaSH-EProm (FEProm) has the speed of internal computer memory combined with the nonvolatility of a computer disk. This device is an EProm-type (Erasable, Programmable, Read-Only Memory) device. The contents of the FEProm can be erased by applying a certain voltage to an input rather by shining ultraviolet light on the device like the typical EProm. The erasing sets each bit in the device to the same value. Like other EProms, the FEProm is a nonvolatile memory. The FEProms are comparable in speed to the internal memory of a computer. Initially, and after erased, each bit of the FEProm is set to a 1. A characteristic of the FEProm as with other EProms is that a bit value of 1 can be changed to a 0, but a bit value of 0 cannot be changed to a 1. Thus, data can be written to the EProm to effect the changing of a bit from a 1 to a 0. However, once a bit is changed to a 0, it cannot be changed back to a 1, that is, unless the entire FEProm is erased to all ones. Effectively, each bit of the FEProm can only be written once but read many times between subsequent erasures. Moreover, each bit of a FEProm can only be erased and set to a 0 a limited number of times. The limited number of times defines the effective life of a FEProm.
Because conventional file systems assume that the storage device has the multiple-write capability, these file systems are not appropriate for the FEProm, which effectively has only a single-write-capability. It would be desirable to have a file system that supports a storage device based on the FEProm. Such a file system would have the speed of computer memory and the nonvolatility of computer disks.
Conventional storage devices, such as computer disks, are block addressable, rather than byte addressable. A byte is the unit of addressability of the internal memory of the, computer, that is, the computer can write or read one byte (typically, eight bits) at a time, but not less. When the computer writes to or reads from a disk it must do so in groups of bytes called a block. Block sizes can vary, but typically are a power of two (128, 256, 512, etc.). For example, if only one byte on a disk is to be changed, then the entire number of bytes in the block size must be written. This may involve the reading of the entire block from disk into the computer memory, changing the one byte (the internal memory is byte addressable), and writing the entire block to the disk.
Conventional file systems store data in a way that leaves unused portions of blocks. The file systems store data from only one file in any given block at a time. The file systems do not, for example, store data from one file in the first 50 bytes of a block and data from another file the last 78 bytes of a 128-byte block. If, however, the length of a file is not an even multiple of the block size, space at the end of a block is unused. In the example above, the last 78 bytes of the block would be unused. When a disk uses a large block size such as 4096, up to 4095 bytes of data can be unused. Although this used space may be a negligible amount on a disk drive that has multi-write capability and that can store millions of bytes, it may be a significant amount on a storage device without multi-write capability and without the capacity to store millions of bytes of data.
The FEProm, in contrast to typical storage devices, is byte addressable, rather than block addressable. It would be desirable to have a file system that would support the byte addressability of a FEProm.